#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
@author:zhengxin
@file: 06_pseudorandom_number.py
@time: 2022/10/12  10:31
# @describe: 4.6 伪随机数生成
"""
# numpy.random模块对Python内置的random进行了补充，增加了一些用于高效生成多种概率分布的样本值的函数。
# 例如，你可以用normal来得到一个标准正态分布的4×4样本数组：
import numpy as np

samples = np.random.normal(size=(4, 4))
print(samples)

# 而Python内置的random模块则只能一次生成一个样本值。从下面的测试结果中可以看出，如果需要产生大量样本值，numpy.random快了不止一个数量级：
from random import normalvariate

# N = 1000000
N = 100
samples = [normalvariate(0, 1) for _ in range(N)]
print(samples)
print(np.random.normal(size=N))

# 我们说这些都是伪随机数，是因为它们都是通过算法基于随机数生成器种子，在确定性的条件下生成的。
# 你可以用NumPy的np.random.seed更改随机数生成种子：
print(np.random.seed(1234))

# numpy.random的数据生成函数使用了全局的随机种子。要避免全局状态，你可以使用numpy.random.RandomState，
# 创建一个与其它隔离的随机数生成器：
rng = np.random.RandomState(1234)
print(rng.randn(10))

"""
表4-8:部分numpy.random函数
    函数      说明
    seed：确定随机数生成器的种子
    permutation：返回一个序列的随机排列或返回一个随机排列的范围
    shuffle：对一个序列就地随机排列
    rand：产生均匀分布的样本值
    randint ：从给定的.上下限范围内随机选取整数
    randn：产生正态分布(平均值为0，标准差为1)的样本值，类似于MATLAB接口
    binomial ：产生二项分布的样本值
    normal：产生正态(高斯)分布的样本值
    beta：产生Beta分布的样本值
"""


"""
表4-8:部分numpy.random函数(续)
    函数  说明
    chisquare：产生卡方分布的样本值
    gamma： 产生Gamma分布的样本值
    uniform： 产生在[0, 1)中均匀分布的样本值

"""